package com.example.user.adapter.in.web.dto;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 登录响应DTO (Data Transfer Object)
 * 用于封装用户登录成功后的响应数据
 * 
 * DTO是数据传输对象，主要用于在不同层之间传输数据
 * 这里专门用于返回用户登录成功后的数据
 * 
 * @Data Lombok注解，自动生成getter、setter、toString等方法
 * @Builder Lombok注解，提供Builder模式构建对象，使代码更清晰易读
 * @NoArgsConstructor Lombok注解，生成无参构造函数
 * @AllArgsConstructor Lombok注解，生成全参构造函数
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class LoginResponse {

    /**
     * JWT访问令牌
     * 
     * 这是用户登录成功后生成的JWT Token
     * 客户端在后续请求中需要在请求头中携带这个Token进行身份认证
     * 格式通常是: Authorization: Bearer <access_token>
     */
    private String accessToken;

    /**
     * 令牌类型
     * 
     * 默认值为"Bearer"，表示这是一个Bearer Token
     * Bearer Token是一种HTTP认证方案，用于OAuth 2.0等认证协议
     */
    private String tokenType = "Bearer";

    /**
     * 用户信息
     * 
     * 包含登录用户的基本信息，如用户名、邮箱、角色等
     * 这样客户端登录后可以直接获取用户信息，无需再次请求
     */
    private UserInfo userInfo;

    /**
     * 令牌过期时间（毫秒时间戳）
     * 
     * 表示这个Token将在什么时候过期
     * 客户端可以根据这个时间判断是否需要重新登录或刷新Token
     * 这里设置为当前时间加上24小时（86400000毫秒）
     */
    private Long expiresIn;
}